/***************************************************************************
 *   Copyright (C) 2010 by Oleg Goncharov  *
 *   $EMAIL$                           *                          
 *                                                                         *
 *   This file is part of ChessVision.                                     *
 *                                                                         *
 *   ChessVision is free software; you can redistribute it and/or modify   *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 *   This program is distributed in the hope that it will be useful,       *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
 *   GNU General Public License for more details.                          *
 *                                                                         *
 *   You should have received a copy of the GNU General Public License     *
 *   along with this program; if not, write to the                         *
 *   Free Software Foundation, Inc.,                                       *
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
 ***************************************************************************/
#ifndef CPOINTMATCH_H
#define CPOINTMATCH_H

#include "cpointnorm.h"

/**
Использует шаблон-изображение для поиска точки.

	@author Goncharov Oleg <goncharovoi@yandex.ru>
*/

using namespace cv;

class CPointMatch : public CPointDetector, public CPointNorm
{
protected:
    Mat		sample;
    float 	threshold;
public:
    CPointMatch(const Mat& _sample, NormMode _mode = BRIGHTNESS_NORM);
    ~CPointMatch();
    void SetTherehold(float _threshold) 
    {
        threshold = _threshold;
    }
    
    bool DetectPoint(const Mat& img, cv::Point2f& point);
    
};


/**
Использует шаблон-изображение с масштабом для поиска точки.

	@author Goncharov Oleg <goncharovoi@yandex.ru>
*/

class CPointScaleMatch : public CPointDetector, public CPointNorm
{
protected:
	int nsamples;
	int * areas;
	Mat * samples;
	float threshold;
public:
	CPointScaleMatch(const Mat& _sample, float min_scale, float max_scale, int steps, NormMode _mode = BRIGHTNESS_NORM);
	~CPointScaleMatch();
	
	void SetTherehold(float _threshold) 
	{ 
	    threshold = _threshold; 	    
	}

    bool DetectPoint(const Mat& img, Point2f& point);
};


#endif

